package com.my.kindlesend.service.impl;

import com.my.kindlesend.dao.UserInfoDao;
import com.my.kindlesend.entity.UserInfo;
import com.my.kindlesend.interceptor.WxLoginInterceptor;
import com.my.kindlesend.service.UserInfoService;
import com.my.kindlesend.utils.UserThreadLocal;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Example;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

@Service
@RequiredArgsConstructor
public class UserInfoServiceImpl implements UserInfoService {

    private final UserInfoDao userInfoDao;

    /**
     * 根据openId保存用户信息
     * 若用户已存在，则更新用户昵称和头像；若用户不存在，则创建新用户
     * @param userInfo 用户信息对象
     * @return 保存或更新后的用户信息对象
     */
    @Override
    public UserInfo saveByOpenId(UserInfo userInfo) {
        // 通过openId查询数据库中是否已存在该用户
        UserInfo dbUserInfo = userInfoDao.findOne(Example.of(UserInfo.builder().openId(userInfo.getOpenId()).build())).orElse(null);
        if (dbUserInfo != null) {
            // 用户已存在，更新用户信息
            userInfo = dbUserInfo.setNickName(userInfo.getNickName()).setAvatarUrl(userInfo.getAvatarUrl()).setUpdateTime(userInfo.getUpdateTime());
        } else {
            // 用户不存在，创建新用户并设置创建时间和更新时间
            userInfo.setCreateTime(LocalDateTime.now()).setUpdateTime(LocalDateTime.now());
        }
        // 保存用户信息到数据库
        return userInfoDao.save(userInfo);
    }

    @Override
    public UserInfo saveKindleEmail(String kindleEmail) {
        UserInfo userInfo = UserThreadLocal.get();
        userInfo.setKindleEmail(kindleEmail);
        return userInfoDao.save(userInfo);
    }

    @Override
    public UserInfo findByOpenId(String openId) {
        return null;
    }

}
